package com.glink.manage.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.glink.common.exception.GeneralSimpleException;
import com.glink.manage.domain.ParticipatingUnitBean;
import com.glink.manage.dto.participatingunit.*;
import com.glink.manage.vo.org.OrgInfoVO;
import com.glink.manage.vo.participatingunit.ParticipatingUnitBaseVO;
import com.glink.manage.vo.participatingunit.ParticipatingUnitListVO;
import com.glink.manage.vo.participatingunit.ParticipatingUnitPageVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author  qiushaoshan
 * @since  2025-01-08
 */
public interface ParticipatingUnitService extends IService<ParticipatingUnitBean> {
    
    /**
     * 保存参建单位
     * @param dto 保存信息
     * @return 保存状态
     */
    boolean saveParticipatingUnit(ParticipatingUnitSaveDTO dto);

    /**
     * 更新参建单位
     * @param dto 更新信息
     * @return 保存状态
     */
    boolean updateParticipatingUnit(ParticipatingUnitUpdateDTO dto) throws GeneralSimpleException;


    /**
     * 根据参建单位ID查询参建单位详情
     * @param dto 参建单位ID
     * @return 参建单位详情
     */
    ParticipatingUnitBaseVO findById(ParticipatingUnitIdDTO dto) throws GeneralSimpleException;

    /**
     * 分页查询
     * @param dto 查询条件
     * @return 分页信息
     */
    IPage<ParticipatingUnitPageVO> findByPage(ParticipatingUnitPageDTO dto);

    /**
     * 导入参建单位
     * @param file 导入文件
     * @return 数量
     */
    Integer importParticipatingUnit(MultipartFile file) throws GeneralSimpleException;

    /**
     * 查询参建单位
     * @return 参建单位列表
     */
    List<ParticipatingUnitListVO> findList();

    /**
     * 参建单位加入黑名单
     * @param dto 参建单位ID
     * @return 加入黑名单状态
     */
    Boolean addBlacklist(ParticipatingUnitBlackListIdDTO dto) throws GeneralSimpleException;

    /**
     * 根据参建单位ID查询参建单位名称
     * @param participatingUnitObjId 参建单位ID
     * @return 参建单位名称
     */
    String findNameByObjId(String participatingUnitObjId);

    /**
     * 根据ID查询参建单位信息
     * @param unitIdList 参建单位ID
     * @return 参建单位信息
     */
    List<ParticipatingUnitListVO> findListByObjIdIn(List<String> unitIdList, boolean isBlacklist);

    /**
     * 获取参建单位树
     * @return 参建单位树
     */
    OrgInfoVO findParticipatingUnitTree();

    /**
     * 根据单位信息查询参建单位对象
     * @param orgIdList 单位ID
     * @return 单位信息
     */
    OrgInfoVO findParticipatingUnitTreeByIdIn(List<String> orgIdList);

    /**
     * 根据ID删除参建单位信息
     * @param dto ID
     * @return 参建单位
     */
    Boolean delById(ParticipatingUnitIdDTO dto);

    /**
     * 查询所有参建单位ID
     * @return 参建单位ID
     */
    List<String> getAllId();
    
}
